package com.demo.core.service.base;

import java.util.List;

import com.demo.core.dao.base.support.ResultSearchResult;
import com.demo.core.dao.base.support.SearchArgumentSupport;
import com.demo.core.model.Template;

/**
 * 模板数据服务
 * @author ryuu.kk
 */
public interface TemplateService {

	/**
	 * 保存模板
	 * @param template 模板模型
	 * @return 主键ID
	 */
	Long save(Template template);
	
	/**
	 * 模板是否存在
	 * @param id 主键ID
	 * @return 模板是否存在
	 */
	boolean exists(Long id);
	
	/**
	 * 删除一个模板
	 * @param id 主键ID
	 */
	void delete(Long id);
	
	/**
	 * 更新模板内容
	 * (name,path,content)
	 * @param id 模板外键ID
	 * @param name 模板模型name
	 * @param path 模板路径
	 * @param content 模板内容
	 */
	void update(Long id, String name, String path, String content);
	
	/**
	 * 根据模板ID查询模板
	 * @param id 模板外键ID
	 * @return Template
	 */
	Template find(Long id);
	
	/**
	 * 通过模板路径查询模板
	 * @param path 带有模板文件名的模板路径
	 * @return Template
	 */
	Template find(String path);
	
	/**
	 * 根据模板ID查询模板
	 * @param id 模板ID
	 * @param isContent 是否包含模板内容
	 * @return Template
	 */
	Template find(Long id, boolean isContent);
	
	/**
	 * 通过模板路径查询模板
	 * @param path 带有模板文件名的模板路径
	 * @param isContext 是否包含模板内容
	 * @return Template
	 */
	Template find(String path, boolean isContext);
	
	/**
	 * 根据站点ID查询站点内的所有模板
	 * @param siteId 站点ID
	 * @param isContent 是否包含模板内容
	 * @return List<Template>
	 */
	List<Template> findList(Long siteId, boolean isContent);
	
	/**
	 * 根据站点ID查询站点内的所有模板
	 * @param siteId 站点ID
	 * @param type 模板类型
	 * @param isContent 是否包含模板内容
	 * @return List<Template>
	 */
	List<Template> findList(Long siteId, String type, boolean isContent);
	
	/**
	 * 通过站点ID分页查询模板
	 * 
	 * @param siteId 站点ID
	 * @param isContent 是否包含模板内容
	 * @param sas SearchArgumentSupport分页和排序模型
	 * @return ResultSearchResult<Template>
	 */
	ResultSearchResult<Template> search(Long siteId, boolean isContent, SearchArgumentSupport sas);

	/**
	 * 通过站点ID和模板类型分页查询模板
	 * 
	 * @param siteId 站点ID
	 * @param type 模板类型
	 * @param isContent 是否包含模板内容
	 * @param sas SearchArgumentSupport分页和排序模型
	 * @return ResultSearchResult<Template>
	 */
	ResultSearchResult<Template> search(Long siteId, String type, boolean isContent, SearchArgumentSupport sas);
	
}
